/** @file 
 *  File per l'aggiornamento dei movimenti del giocatore, sfondo e cattivi; chiede se si vuole continuare a giocare una volta vinto o perso.
 */
 
#include <iostream>
#include <cstdio>
#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_font.h>
#include "strutt_dati.h"
#include "inizz_config.h"
using namespace std;

/** Definizione utile per il debug */
#ifdef DEBUG_MODE
#define DBG(a) {a;}
#else 
#define DBG(a)
#endif

void UpSfondo(sfondo &SFONDO)
{
	SFONDO.x -= SFONDO.velx;
	if (SFONDO.x + SFONDO.larghezza <=0)
		SFONDO.x =0;
}
 
void UpCattivi(cattivi *CATTIVI, giocatore &GIOCATORE, const int ncattivi)
{
	for(int numcattivo=0; numcattivo<ncattivi; numcattivo++)
	{
		CATTIVI[numcattivo].x -= CATTIVI[numcattivo].velx;
		if (CATTIVI[numcattivo].x <= GIOCATORE.x)
			GIOCATORE.punti += 1;
	}
}

int espl_giocatore(giocatore &GIOCATORE, int puntitmp)
{
	if (GIOCATORE.vite>0)
	{
		GIOCATORE.vite--;
		DBG(cout<<"Numero vite: "<<GIOCATORE.vite<<endl);
	}
	else DBG(cout<<"Numero vite negativo!"<<endl);
	
	if (GIOCATORE.punti>puntitmp)
		puntitmp=GIOCATORE.punti;
		
    GIOCATORE.morto=false;		
   	al_rest(3.0);
   	
   	return puntitmp;
}

void saltare(giocatore &GIOCATORE)
{
	const int gravita=1, ymax=10;
	
	if (GIOCATORE.salto)
		GIOCATORE.vely += gravita;
	else 
		GIOCATORE.vely = 0;
				
	GIOCATORE.y += GIOCATORE.vely;
			
	if (GIOCATORE.y < ymax)
		GIOCATORE.y = ymax;
			
	if (GIOCATORE.y >= HDisplay - GIOCATORE.altezza) 
	{
		GIOCATORE.salto = false;
		GIOCATORE.y = HDisplay - GIOCATORE.altezza;	
	}	
}


void finito(ALLEGRO_KEYBOARD_STATE StatoTastiera, sfondo &SFONDO, giocatore &GIOCATORE, cattivi *CATTIVI, const int ncattivi, const int LDisplay, const int puntitmp, bool vinto, bool &fine, bool &gameover)
{
	ALLEGRO_FONT *font=al_load_font("MOTO.TTF", 36, 0);   		
	bool end=true;
	char stringaover[40];
	
	while(end==true)
	{
		al_get_keyboard_state(&StatoTastiera);
						
		if (vinto==true)
			al_draw_text(font, al_map_rgb(0,255,255), LDisplay/2, HDisplay/2, ALLEGRO_ALIGN_CENTRE, "hai vinto!");
		else 
		{
			sprintf(stringaover, "game over! hai un record di %d punti!", puntitmp);
			al_draw_text(font, al_map_rgb(0,255,255), LDisplay/2, HDisplay/2, ALLEGRO_ALIGN_CENTRE, stringaover);
		}
				   		
		al_draw_textf(font, al_map_rgb(0,255,255), LDisplay/2, HDisplay/2+50, ALLEGRO_ALIGN_CENTRE,"vuoi continuare a giocare? s-si        n-no");
		al_flip_display();
		al_clear_to_color(al_map_rgb(0,0,0));
				
		if 	(al_key_down(&StatoTastiera, ALLEGRO_KEY_S))		
		{
			gameover=true;
			inizzSfondo(SFONDO);
			inizzGiocatore(GIOCATORE, gameover);
			inizzCattivi(CATTIVI, ncattivi);
			end=false;
		}
							
		if (al_key_down(&StatoTastiera, ALLEGRO_KEY_N))
		{
			fine=true;
			end=false;
		}
	}
	
	al_destroy_font(font);
}
